home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / sunrpc / gss_api.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  3KB  |  123 lines

  1. /*
  2.  * linux/include/linux/gss_api.h
  3.  *
  4.  * Somewhat simplified version of the gss api.
  5.  *
  6.  * Dug Song <dugsong@monkey.org>
  7.  * Andy Adamson <andros@umich.edu>
  8.  * Bruce Fields <bfields@umich.edu>
  9.  * Copyright (c) 2000 The Regents of the University of Michigan
  10.  *
  11.  * $Id$
  12.  */
  13.  
  14. #ifndef _LINUX_SUNRPC_GSS_API_H
  15. #define _LINUX_SUNRPC_GSS_API_H
  16.  
  17. #ifdef __KERNEL__
  18. #include <linux/sunrpc/xdr.h>
  19. #include <linux/uio.h>
  20.  
  21. /* The mechanism-independent gss-api context: */
  22. struct gss_ctx {
  23.     struct gss_api_mech    *mech_type;
  24.     void            *internal_ctx_id;
  25. };
  26.  
  27. #define GSS_C_NO_BUFFER        ((struct xdr_netobj) 0)
  28. #define GSS_C_NO_CONTEXT    ((struct gss_ctx *) 0)
  29. #define GSS_C_NULL_OID        ((struct xdr_netobj) 0)
  30.  
  31. /*XXX  arbitrary length - is this set somewhere? */
  32. #define GSS_OID_MAX_LEN 32
  33.  
  34. /* gss-api prototypes; note that these are somewhat simplified versions of
  35.  * the prototypes specified in RFC 2744. */
  36. u32 gss_import_sec_context(
  37.         struct xdr_netobj    *input_token,
  38.         struct gss_api_mech    *mech,
  39.         struct gss_ctx        **ctx_id);
  40. u32 gss_get_mic(
  41.         struct gss_ctx        *ctx_id,
  42.         u32            qop,
  43.         struct xdr_buf        *message,
  44.         struct xdr_netobj    *mic_token);
  45. u32 gss_verify_mic(
  46.         struct gss_ctx        *ctx_id,
  47.         struct xdr_buf        *message,
  48.         struct xdr_netobj    *mic_token,
  49.         u32            *qstate);
  50. u32 gss_delete_sec_context(
  51.         struct gss_ctx        **ctx_id);
  52.  
  53. struct gss_api_mech * gss_mech_get_by_name(char *name);
  54. struct gss_api_mech * gss_mech_get_by_pseudoflavor(u32 pseudoflavor);
  55. u32 gss_pseudoflavor_to_service(struct gss_api_mech *, u32 pseudoflavor);
  56. char *gss_service_to_auth_domain_name(struct gss_api_mech *, u32 service);
  57.  
  58. struct pf_desc {
  59.     u32    pseudoflavor;
  60.     u32    qop;
  61.     u32    service;
  62.     char    *name;
  63.     char    *auth_domain_name;
  64. };
  65.  
  66. /* Different mechanisms (e.g., krb5 or spkm3) may implement gss-api, and
  67.  * mechanisms may be dynamically registered or unregistered by modules. */
  68.  
  69. /* Each mechanism is described by the following struct: */
  70. struct gss_api_mech {
  71.     struct list_head    gm_list;
  72.     struct module        *gm_owner;
  73.     struct xdr_netobj    gm_oid;
  74.     char            *gm_name;
  75.     struct gss_api_ops    *gm_ops;
  76.     /* pseudoflavors supported by this mechanism: */
  77.     int            gm_pf_num;
  78.     struct pf_desc *    gm_pfs;
  79. };
  80.  
  81. /* and must provide the following operations: */
  82. struct gss_api_ops {
  83.     u32 (*gss_import_sec_context)(
  84.             struct xdr_netobj    *input_token,
  85.             struct gss_ctx        *ctx_id);
  86.     u32 (*gss_get_mic)(
  87.             struct gss_ctx        *ctx_id,
  88.             u32            qop, 
  89.             struct xdr_buf        *message,
  90.             struct xdr_netobj    *mic_token);
  91.     u32 (*gss_verify_mic)(
  92.             struct gss_ctx        *ctx_id,
  93.             struct xdr_buf        *message,
  94.             struct xdr_netobj    *mic_token,
  95.             u32            *qstate);
  96.     void (*gss_delete_sec_context)(
  97.             void            *internal_ctx_id);
  98. };
  99.  
  100. int gss_mech_register(struct gss_api_mech *);
  101. void gss_mech_unregister(struct gss_api_mech *);
  102.  
  103. /* returns a mechanism descriptor given an OID, and increments the mechanism's
  104.  * reference count. */
  105. struct gss_api_mech * gss_mech_get_by_OID(struct xdr_netobj *);
  106.  
  107. /* Returns a reference to a mechanism, given a name like "krb5" etc. */
  108. struct gss_api_mech *gss_mech_get_by_name(char *);
  109.  
  110. /* Similar, but get by pseudoflavor. */
  111. struct gss_api_mech *gss_mech_get_by_pseudoflavor(u32);
  112.  
  113. /* Just increments the mechanism's reference count and returns its input: */
  114. struct gss_api_mech * gss_mech_get(struct gss_api_mech *);
  115.  
  116. /* For every succesful gss_mech_get or gss_mech_get_by_* call there must be a
  117.  * corresponding call to gss_mech_put. */
  118. void gss_mech_put(struct gss_api_mech *);
  119.  
  120. #endif /* __KERNEL__ */
  121. #endif /* _LINUX_SUNRPC_GSS_API_H */
  122.  
  123.